//package shark.picture.annotation;
//
///**
// * @description
// * @author jianxin.wei
// * @date 2025/8/26 19:30
// */
//public class t2 {
//
//    public AjaxResult jmCalculate(JSONObject param) {
//        AjaxResult ajaxResult = new AjaxResult();
//        JSONObject json = new JSONObject();
//
//
//        String consNoSm4 = param.getStr("consNo");
//        String consNo = SM4Utils.decrypt(consNoSm4);
//        try {
//            consNo = check(consNo);
//
//            DateTime now = DateUtil.date();
//            LinkedList<String> dateList = rangeDay(DateUtil.beginOfMonth(now), DateUtil.endOfMonth(now));
//
//            int pastSize = (int) (DateUtil.betweenDay(DateUtil.beginOfMonth(DateUtil.offsetMonth(now, -1)),
//                    DateUtil.endOfMonth(DateUtil.offsetMonth(now, -1)), false) + 1);
//            int curSize = (int) (DateUtil.betweenDay(DateUtil.beginOfMonth(now), DateUtil.endOfMonth(now), false) + 1);
//            if (redisUtil.containsMapKey(R_KEY, "Ele_" + consNo + "_jmCalculate")) {
//                Object o = redisUtil.getMapCache(R_KEY, "Ele_" + consNo + "_jmCalculate");
//                return ajaxResult.success(o);
//            }
//
//            BigDecimal[] curPower = new BigDecimal[MAX_DAYS];
//            BigDecimal[] pastPower = new BigDecimal[MAX_DAYS];
//            BigDecimal[] lastYearPower = new BigDecimal[MAX_DAYS];
//            Arrays.fill(curPower, BigDecimal.ZERO);
//            Arrays.fill(pastPower, BigDecimal.ZERO);
//            Arrays.fill(lastYearPower, BigDecimal.ZERO);
//
//
//            BigDecimal curJian = BigDecimal.ZERO;
//            BigDecimal curFeng = BigDecimal.ZERO;
//            BigDecimal curPing = BigDecimal.ZERO;
//            BigDecimal curGu = BigDecimal.ZERO;
//            BigDecimal curSg = BigDecimal.ZERO;
//            BigDecimal promptPastPing = BigDecimal.ZERO;
//            BigDecimal promptPastGu = BigDecimal.ZERO;
//
//
//            BigDecimal ygPower = BigDecimal.ZERO;
//            BigDecimal promptCurPatio = BigDecimal.ZERO;
//            BigDecimal promptPastPatio = BigDecimal.ZERO;
//            BigDecimal curTotal = BigDecimal.ZERO;
//            BigDecimal pastTotal = BigDecimal.ZERO;
//            BigDecimal lastYearTotal = BigDecimal.ZERO;
//
//            List<DfdlMadeEntity> madeList = madeRepo.findByConsNo(consNo);
//            if (madeList == null || madeList.isEmpty()) {
//                log.info("电费电量复核-jmCalculate-用户:{} 电表数据为空", consNo);
//                return ajaxResult.addError("该户号未存在电表数据,请稍后从首页重新加载！");
//            }
//            String curYm = DateUtil.format(DateUtil.date(), "yyyyMM");
//            for (DfdlMadeEntity madeNoEntity : madeList) {
//                String madeNo = madeNoEntity.getMadeNo();
//                log.info("电费电量复核-jmCalculate-获取当前月日用电量-入参-consNo:{},madeNo:{},curYm:{}", consNo, madeNo, curYm);
//                String cur = callWebservice.getRydl(consNo, madeNo, curYm);
//                log.info("电费电量复核-jmCalculate-获取当前月日用电量-出参:{}", cur);
//                JSONArray curDataList;
//                curDataList = JSONUtil.parseObj(cur).getJSONObject("data").getJSONArray("dateList");
//                redisUtil.setMapCache(R_KEY, R_RYDL + consNo,  cur, 30, TimeUnit.MINUTES);
//                for (int i = 0; i < curDataList.size(); i++) {
//                    JSONObject jsonObject = curDataList.getJSONObject(i);
//                    BigDecimal power = new BigDecimal(jsonObject.getStr("total"));
//                    curFeng = curFeng.add(new BigDecimal(jsonObject.getStr("feng") == null ? "0" : jsonObject.getStr("feng")));
//                    curPing = curPing.add(new BigDecimal(jsonObject.getStr("ping") == null ? "0" : jsonObject.getStr("ping")));
//                    curGu = curGu.add(new BigDecimal(jsonObject.getStr("gu") == null ? "0" : jsonObject.getStr("gu")));
//                    curJian = curJian.add(new BigDecimal(jsonObject.getStr("jian") == null ? "0" : jsonObject.getStr("jian")));
//                    curSg = curSg.add(new BigDecimal(jsonObject.getStr("Sg") == null ? "0" : jsonObject.getStr("Sg")));
//                    curTotal = curTotal.add(power);
//                    curPower[i + 1] = curPower[i + 1].add(power);
//                }
//                BigDecimal promptCurPing = curPing;
//                BigDecimal promptCurGu = curGu;
//
//                BigDecimal estimateCurFeng = curFeng;
//                BigDecimal estimateCurPing = curPing;
//                BigDecimal estimateCurGu = curGu;
//                BigDecimal estimateCurJian = curJian;
//                BigDecimal estimateCurSg = curSg;
//
//                String pastYm = DateUtil.format(DateUtil.offsetMonth(DateUtil.date(), -1), "yyyyMM");
//                log.info("电费电量复核-jmCalculate-获取上月日用电量-入参-consNo:{},madeNo:{},curYm:{}", consNo, madeNo, pastYm);
//                String past = callWebservice.getRydl(consNo, madeNo, pastYm);
//                log.info("电费电量复核-jmCalculate-获取上月日用电量-出参:{}", past);
//                JSONArray pastDataList;
//                BigDecimal endPastPower = BigDecimal.ZERO;
//                pastDataList = JSONUtil.parseObj(past).getJSONObject("data").getJSONArray("dateList");
//                JSONObject pastStartJson = pastDataList.getJSONObject(0);
//                String pastStartDay = pastStartJson.getStr("day");
//                String pastStartPower = pastStartJson.getStr("total");
//                int pastStartDayInt = Integer.parseInt(pastStartDay.substring(pastStartDay.length() - 2));
//                for (int i = 0; i < pastStartDayInt; i++) {
//                    endPastPower = new BigDecimal(pastStartPower);
//                    if (i > curDataList.size() - 1) {
//                        promptPastPing = promptPastPing.add(new BigDecimal(pastStartJson.getStr("ping") == null ? "0" : pastStartJson.getStr("ping")));
//                        promptPastGu = promptPastGu.add(new BigDecimal(pastStartJson.getStr("gu") == null ? "0" : pastStartJson.getStr("gu")));
//                        estimateCurFeng = estimateCurFeng.add(new BigDecimal(pastStartJson.getStr("feng") == null ? "0" : pastStartJson.getStr("feng"
//                        )));
//                        estimateCurPing = estimateCurPing.add(new BigDecimal(pastStartJson.getStr("ping") == null ? "0" : pastStartJson.getStr("ping"
//                        )));
//                        estimateCurGu = estimateCurGu.add(new BigDecimal(pastStartJson.getStr("gu") == null ? "0" : pastStartJson.getStr("gu")));
//                        estimateCurJian = estimateCurJian.add(new BigDecimal(pastStartJson.getStr("jian") == null ? "0" : pastStartJson.getStr("jian"
//                        )));
//                        estimateCurSg = estimateCurSg.add(new BigDecimal(pastStartJson.getStr("Sg") == null ? "0" : pastStartJson.getStr("Sg")));
//                    } else {
//                        pastTotal = pastTotal.add(endPastPower);
//                    }
//                    pastPower[i + 1] = pastPower[i + 1].add(endPastPower);
//                }
//                for (int i = pastStartDayInt+1,j = 1; j < pastDataList.size(); i++,j++) {
//                    JSONObject jsonObject = pastDataList.getJSONObject(j);
//                    endPastPower = new BigDecimal(jsonObject.getStr("total"));
//                    if (i > curDataList.size() - 1) {
//                        promptPastPing = promptPastPing.add(new BigDecimal(jsonObject.getStr("ping") == null ? "0" : jsonObject.getStr("ping")));
//                        promptPastGu = promptPastGu.add(new BigDecimal(jsonObject.getStr("gu") == null ? "0" : jsonObject.getStr("gu")));
//                        estimateCurFeng = estimateCurFeng.add(new BigDecimal(jsonObject.getStr("feng") == null ? "0" : jsonObject.getStr("feng"
//                        )));
//                        estimateCurPing = estimateCurPing.add(new BigDecimal(jsonObject.getStr("ping") == null ? "0" : jsonObject.getStr("ping"
//                        )));
//                        estimateCurGu = estimateCurGu.add(new BigDecimal(jsonObject.getStr("gu") == null ? "0" : jsonObject.getStr("gu")));
//                        estimateCurJian = estimateCurJian.add(new BigDecimal(jsonObject.getStr("jian") == null ? "0" : jsonObject.getStr("jian"
//                        )));
//                        estimateCurSg = estimateCurSg.add(new BigDecimal(jsonObject.getStr("Sg") == null ? "0" : jsonObject.getStr("Sg")));
//                    } else {
//                        pastTotal = pastTotal.add(endPastPower);
//                    }
//                    pastPower[i] = pastPower[i].add(endPastPower);
//                }
//                if (pastSize < curSize) {
//                    for (int i = pastSize + 1; i < curSize + 1; i++) {
//                        pastPower[i] = pastPower[i].add(endPastPower);
//                    }
//                }
//                if(promptCurGu.add(promptCurPing).equals(BigDecimal.ZERO)){
//                    promptCurPatio = new BigDecimal("-1");
//                }else {
//                    promptCurPatio = promptCurPing.divide(promptCurGu.add(promptCurPing), 2, RoundingMode.HALF_UP);
//                }
//                if(promptPastGu.add(promptPastPing).equals(BigDecimal.ZERO)){
//                    promptPastPatio = new BigDecimal("-1");
//                }else {
//                    promptPastPatio = promptPastPing.divide(promptPastGu.add(promptPastPing), 2, RoundingMode.HALF_UP);
//                }
//
//                String lastYm = DateUtil.format(DateUtil.offsetMonth(DateUtil.date(), -12), "yyyyMM");
//                log.info("电费电量复核-jmCalculate-获取去年当月日用电量-入参-consNo:{},madeNo:{},curYm:{}", consNo, madeNo, lastYm);
//                String th = callWebservice.getRydl(consNo, madeNo, lastYm);
//                log.info("电费电量复核-jmCalculate-获取去年当月日用电量-出参:{}", th);
//                JSONArray thDataList;
//                ygPower = curTotal;
//                thDataList = JSONUtil.parseObj(th).getJSONObject("data").getJSONArray("dateList");
//                String thStartDay = thDataList.getJSONObject(0).getStr("day");
//                String thStartPower = thDataList.getJSONObject(0).getStr("total");
//                int thStartDayInt = Integer.parseInt(thStartDay.substring(thStartDay.length() - 2));
//                for (int i = 0; i < thStartDayInt; i++) {
//                    BigDecimal power = new BigDecimal(thStartPower);
//                    lastYearPower[i+1] = lastYearPower[i + 1].add(power);
//                    if (i <= curDataList.size() - 1) {
//                        lastYearTotal = lastYearTotal.add(power);
//                    }
//                    if (i>= curDataList.size()  ){
//                        ygPower = ygPower.add(power);
//                    }
//                }
//                for (int i = thStartDayInt + 1,j = 1; j < thDataList.size(); j++,i++) {
//                    JSONObject jsonObject = thDataList.getJSONObject(j);
//                    BigDecimal power = new BigDecimal(jsonObject.getStr("total"));
//                    lastYearPower[i] = lastYearPower[i].add(power);
//                    if (i <= curDataList.size() - 1) {
//                        lastYearTotal = lastYearTotal.add(power);
//                    }
//                    if (i>= curDataList.size()  ){
//                        ygPower = ygPower.add(power);
//                    }
//                }
//            }
//
//
//            List<Map<String, String>> cur = new ArrayList<>();
//            List<Map<String, String>> past = new ArrayList<>();
//            List<Map<String, String>> lastYear = new ArrayList<>();
//
//
//            int curStartOfMonth = Integer.parseInt(DateUtil.format(DateUtil.date(), "dd")) - 1;
//            int curEndOfMonth = Integer.parseInt(DateUtil.format(DateUtil.endOfMonth(DateUtil.date()), "dd"));
//            for (int i = 1; i < curEndOfMonth + 1; i++) {
//                Map<String, String> map = new HashMap<>();
//                map.put("power", i >= curStartOfMonth ? lastYearPower[i].toString() : curPower[i].toString());
//                map.put("isReal", i >= curStartOfMonth ? "0" : "1");
//                map.put("curDate", dateList.poll());
//                cur.add(map);
//            }
//
//            int pastEndOfMonth = Integer.parseInt(DateUtil.format(DateUtil.endOfMonth(DateUtil.offsetMonth(DateUtil.date(), -1)), "dd"));
//            for (int i = 1; i < pastEndOfMonth + 1; i++) {
//                Map<String, String> map = new HashMap<>();
//                map.put("power", pastPower[i].toString());
//                past.add(map);
//            }
//
//            int lastYearEndOfMonth = Integer.parseInt(DateUtil.format(DateUtil.endOfMonth(DateUtil.offsetMonth(DateUtil.date(), -12)), "dd"
//            ));
//            for (int i = 1; i < lastYearEndOfMonth + 1; i++) {
//                Map<String, String> map = new HashMap<>();
//                map.put("power", lastYearPower[i].toString());
//                lastYear.add(map);
//            }
//            json.set("curElec", cur);
//            json.set("hbElec", past);
//            json.set("tbElec", lastYear);
//            json.set("totalAmount", curTotal.setScale(2, RoundingMode.HALF_UP)); // 月使用电量
//
//
//            DfdlBaseInfoEntity entity = baseInfoRepo.findByConsNo(consNo);
//
//            String pow1Used = entity.getPow1Used();
//            String pow2Used = entity.getPow2Used();
//            String pow3Used = entity.getPow3Used();
//            String power = new BigDecimal(pow1Used).add(new BigDecimal(pow2Used)).add(new BigDecimal(pow3Used)).toString();
//            json.set("power", power);
//
//            String pow1 = entity.getPow1();
//            String pow2 = entity.getPow2();
//
//            String powerlevel = new BigDecimal(power).compareTo(new BigDecimal(pow1)) > 0 ?
//                    (new BigDecimal(power).compareTo(new BigDecimal(pow2)) > 0 ? "3" : "2") : "1";
//
//
//            json.set("totalPower", ygPower.setScale(2 , RoundingMode.HALF_UP)); // 月预估电量
//            String hbPercent = "-";
//            if (!pastTotal.equals(BigDecimal.ZERO)) {
//                hbPercent = curTotal.subtract(pastTotal).multiply(new BigDecimal(100)).divide(pastTotal, 2, RoundingMode.HALF_UP).toString();
//            }
//            json.set("hbPercent", hbPercent);
//            String tbPercent = "-";
//            if (!lastYearTotal.equals(BigDecimal.ZERO)) {
//                tbPercent =
//                        curTotal.subtract(lastYearTotal).multiply(new BigDecimal(100)).divide(lastYearTotal, 2, RoundingMode.HALF_UP).toString();
//            }
//            json.set("tbPercent", tbPercent);
//
//
//            int prompt = promptCurPatio.compareTo(promptPastPatio);
//            String promptStr = "";
//            if (prompt > 0 && "3".equals(powerlevel)) {
//                promptStr = "您当月平时段电量占比有所增长，注意错峰用电，有助于降低您的电费。您目前的阶梯电量已达到了第三阶梯，目前处于最高档位，电费较平时可能会有增长喔。";
//            } else if (prompt > 0 && "2".equals(powerlevel)) {
//                promptStr = "您当月平时段电量占比有所增长，注意错峰用电，有助于降低您的电费。您目前的阶梯电量即将进入第三阶梯，注意合理用电喔，避免电费突增。";
//            } else if (prompt < 0 && "3".equals(powerlevel)) {
//                promptStr = "您目前的阶梯电量已达到了第三阶梯，目前处于最高档位，电费较平时可能会有增长喔。";
//            } else if (prompt < 0 && "2".equals(powerlevel)) {
//                promptStr = "您目前的阶梯电量即将进入第三阶梯，注意合理用电喔，避免电费突增。";
//            }
//
//            if (promptCurPatio.equals(new BigDecimal("-1"))){
//                promptStr = "您可在每月3号以后，查询本月用电情况。";
//            }
//            json.set("promptStr", promptStr);
//
//            redisUtil.setMapCache(R_KEY, "Ele_" + consNo + "_jmCalculate", json, 30, TimeUnit.MINUTES);
//            return ajaxResult.success(json);
//        } catch (Exception e) {
//            log.info("jmCalculate-获取用户日用电量信息失败", e);
//            return ajaxResult.addError("网络异常，获取数据失败！");
//        }
//    }
//
//}
